#include <stdio.h>
#include <stdlib.h>

typedef	struct Node		
{
	int data;
	struct Node* next;
}node; 

Node* initList() {
	Node* list = (Node*)malloc(sizeof(Node));
	list->data = 0;
	list->next = NULL;
	return list;
}

void headInsert(Node* list,int data) {
	Node* node = (Node*)malloc(sizeof(Node));
	node->data = data;
	node->next = list->next;
	list->next = node;
	list->data++;
}

void tailInsert(Node* list, int data) {
	Node* head = list;
	Node* node = (Node*)malloc(sizeof(Node));
	if (head->data) {
		node->data = data;
		node->next = NULL;
		list = list->next;
		while (list->next) {
			list = list->next;
		}
		list->next = node;
		head->data++;
	}else{
		node->data = data;
		node->next = NULL;
		list->next = node;
		head->data++;
	}
}

void Delete(Node* list, int data) {
	Node* pre = list;
	Node* current = list->next;
	while (current) {
		if (current->data == data) {
			pre->next = current->next;
			free(current);
			break;
		}
		pre = current;
		current = current->next;
	}
	list->data--;
}

void printList(Node* list) {
	if (list->data) {
		list = list->next;
		while (list) {
			printf("%d ", list->data);
			list = list->next;
		}
		printf("\n");
	}
	else
	{
		printf("NULL\n");
	}
	
}

int main()
{
	Node* list = initList();
	for (int i = 0; i < 5; i++) {
		headInsert(list, i);
	}
	printList(list);
	for (int j = 10; j < 15; j++) {
		tailInsert(list, j);
	}
	printList(list);
	Delete(list, 4);
	Delete(list, 12);
	Delete(list, 14);
	printList(list);
	return 0;
};